package com.shanks.framework.mq.common.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {
    public static String getCurrentTime() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = format.format(new Date());
        return str;
    }

    /**
     * 在指定日期上添加分钟数
     *
     * @param date    原始日期
     * @param minutes 添加的分钟数（可以为负数表示减去）
     * @return 添加分钟后的日期
     */
    public static Date addDateMinute(Date date, int minutes) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }

    /**
     * 在指定日期上添加秒数
     *
     * @param date    原始日期
     * @param seconds 添加的秒数（可以为负数表示减去）
     * @return 添加秒数后的日期
     */
    public static Date addDateSeconds(Date date, int seconds) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.SECOND, seconds);
        return calendar.getTime();
    }

    /**
     * 在指定日期上添加小时数
     *
     * @param date  原始日期
     * @param hours 添加的小时数（可以为负数表示减去）
     * @return 添加秒数后的日期
     */
    public static Date addDateHours(Date date, int hours) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR, hours);
        return calendar.getTime();
    }

    /**
     * 在指定日期上添加天数
     *
     * @param date 原始日期
     * @param days 添加的天数（可以为负数表示减去）
     * @return 添加秒数后的日期
     */
    public static Date addDateDay(Date date, int days) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);  // 设置原始日期
        calendar.add(Calendar.DAY_OF_MONTH, days);  // 添加天数
        return calendar.getTime();  // 返回新的日期
    }

    public static String formatDateToStr(Date date, String pattern) {
        if (date == null || pattern == null || pattern.isEmpty()) {
            throw new IllegalArgumentException("Date 或 pattern 不能为空");
        }

        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }
}
